#openpyxl     --- pip install openpyxl
#使用Python进行操作文件
file = open(filename,mode,encoding)#文件命/路径，打开方式，编码方式
#'r'：只读模式（默认）
#'w'：写入模式。若文件存在，会先清空然后写入内容；如果文件不存在，会创建一个新的文件。
#'a'：追加模式。在文件末尾追加新的内容，不会清空原有内容；如果文件不存在，会创建一个新的文件。
#'x'：独占创建模式。创建新文件，如果文件已存在，则打开失败。
#'b'：二进制模式。以二进制格式读取或写入文件，如读取图片或视频文件。
#'t'：文本模式（默认）。以文本格式读取或写入文件，如读取或写入字符串。
#ascii：ASCII编码，适用于英文文本。
#utf-8：UTF-8编码，适用于多种语言的文本。
#latin-1：Latin-1编码，适用于西欧语言的文本。
########################################################################################################################################################
#文件操作
file = open('a.txt','w',encoding='utf-8')
file.write('hello python')

file = open('a.txt','r',encoding='utf-8')
r = file.read()     #一次性读取全部内容为一个字符串（str）不分行，也不保留列表结构
r = file.readline() #读取当前指针所在位置的一行（包括末尾换行符 \n）每调用一次读取一行，适合逐行处理。
r = file.readlines()#一次性读取所有行，并返回列表（list[str]），每个元素是一行
print(r,type(r))
#############################################################################################################################################################################################################
#Excel文件操作
import openpyxl
workbook = openpyxl.Workbook()                  #创建Excel文件在保存时指定文件名
workbook.create_sheet(index=0,title='two sheet')#创建Excel文件中的子表，index决定子表前后顺序0，1，2···可不写
workbook.save('user.xlsx')                      #保存

workbook = openpyxl.load_workbook('user.xlsx')  #加载已有Excel文件
workbook.remove(workbook['two sheet'])          #删除Excel文件中的子表
workbook.save('user.xlsx')

workbook = openpyxl.load_workbook('user.xlsx')
worksheet = workbook['one sheet']               #加载子表
#worksheet = workbook.create_sheet(title='one sheet')
#################################################
worksheet['A1'] = "姓名"
worksheet.cell(row=3,column=1,value="李四")     #单格添加的两种方式
#################################################
data = [
    ['姓名','年龄','性别'],
    ['张三',18,'男'],
    ['李四',19,'女'],
]
for i in data:
    worksheet.append(i)                     

for i in range(1,21):
    worksheet.append(range(1,21))               #多格添加的两种方式
#################################################
r = worksheet['A1']   
print(r,type(r)) #读取地址
print(r.value)   #读取值
r = worksheet.cell(row=1,column=1).value
print(r,type(r))                                #单格读取的两种方式
#################################################
r = worksheet['A']#数字为行，字母为列，此为A列
for i in r:
    print(i.value,end="\t")

r = worksheet['A':'B']#打印A列到B列的所有内容
for i in r:
    for j in i:
        print(j.value,end="\t")                 #按列/行读取的两种方式
 ################################################                      
for i in worksheet.iter_rows(min_row=3,max_row=5,min_col=1,max_col=2):#按行遍历
    for j in i:                                                       #范围第三行-第5行，第1列-第2列
        print(j.value,end="\t") 
    print()                                                           #参数可不写，默认遍历所有行列
                                            
for i in worksheet.iter_cols(min_row=3,max_row=5,min_col=1,max_col=2):#按列遍历
    for j in i:                                                       #范围第3列-第5列，第1行-第2行
        print(j.value,end="\t")#\t起到空格的作用
    print() #起到换行的作用                 
#######################################################################################################################################################################
#使用类对文件操作进行封装
import openpyxl

class ReadExcel:
    @staticmethod#定义下面函数为静态方法，可直接调用
    def read_excel(file_name,sheet_name):
        workbook = openpyxl.load_workbook(file_name)
        sheet = workbook[sheet_name]
        data = [[sheet.cell(row=i,column=j).value for j in range(1,sheet.max_column+1)] for i in range(2,sheet.max_row+1)]
        return data

if __name__ == '__main__':#当这个 .py 文件被直接运行时，会执行 print(...) 语句，测试 ReadExcel.read_excel() 方法是否能正常工作；而如果这个文件被作为模块导入到其他文件中时，这部分代码则不会执行。
    print(ReadExcel.read_excel('user.xlsx','user'))







